import axios from 'axios'
import { Message } from 'element-ui'
import store from '@/store'
import { getTime } from '@/utils/auth'
import router from '@/router'
// create an axios instance
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
  // withCredentials: true, // send cookies when cross-domain requests
  timeout: 5000 // request timeout
})

// 判断当前时间与登录时的token时间是否大于指定数
const checkTimeout = () => {
  const current = (new Date()).getTime()
  console.log(current)
  // 登录时间
  const login = getTime()
  console.log(login)
  const timeout = 1000 * 60 * 60 * 2
  return current - login > timeout
}
// request interceptor

// 请求拦截器
// response interceptor
service.interceptors.request.use(config => {
  const token = store.getters.token
  // 如果有token，请求是添加token
  console.log(token)
  if (token) {
    if (checkTimeout()) {
      // 删除token，调回登录页
      store.dispatch('user/logout')
      router.push({ path: '/login' })
      return Promise.reject(new Error('token 已超时'))
    } else {
      config.headers.Authorization = token
    }
  }
  return config
},
err => {
  Message.error(err.message)
  return Promise.reject(err)
})

// 响应拦截器
service.interceptors.response.use(res => {
  // 网络请求成功，
  const { data, success, message } = res.data
  // 数据成功，返回data
  if (success) {
    return data
  } else {
    // 数据错误响应
    Message.error(message)
    console.log('数据错误')
    // 将当前的promise拒绝掉
    return Promise.reject(new Error(message))
  }
},
err => {
  // 网络错误
  console.dir(err)
  // 如果请求响应之后，token被修改，就返回
  if (err.response && err.response.data && err.response.data.code === 10002) {
    // 删除token，调回登录页
    store.dispatch('user/logout')
    router.push({ path: '/login' })
  } Message.error(err.message)
  // 如果想要将当前正在执行的 promise 拒绝掉
  // 直接走 catch 逻辑
  // 返回 Promise.reject(err) 即可
  return Promise.reject(err)
}
)

export default service
